///**
// * Project Name:spring-config-client File Name:ApplicationController.java Package
// * Name:org.spring.config.client.controller Date:2019年10月16日下午3:54:52 Copyright (c) 2019, dengqian37@126.com All Rights
// * Reserved.
// *
// */
//
//package org.spring.config.client.controller;
//
//import java.util.Collections;
//import java.util.Map;
//import java.util.Set;
//
//import javax.annotation.Resource;
//
//import org.springframework.cloud.client.serviceregistry.Registration;
//import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
//import org.springframework.cloud.context.refresh.ContextRefresher;
//import org.springframework.context.ConfigurableApplicationContext;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.ResponseEntity;
//import org.springframework.jmx.export.annotation.ManagedOperation;
//import org.springframework.util.Assert;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.bind.annotation.RestController;
//
//import com.netflix.appinfo.InstanceInfo;
//
///**
// * ClassName:ApplicationController <br/>
// * Function: TODO ADD FUNCTION. <br/>
// * Reason: TODO ADD REASON. <br/>
// * Date: 2019年10月16日 下午3:54:52 <br/>
// * 
// * @author dengqian
// * @version
// * @since JDK 1.8
// * @see
// */
//@RestController
//@RequestMapping("/application/")
//public class ApplicationController {
////    @Resource
////    private  ServiceRegistry serviceRegistry;
//    @Resource
//    private Registration registration;
//    @Resource
//    private ContextRefresher contextRefresher;
//    @Resource
//    private ConfigurableApplicationContext context;
//
//    private static final Map<String, Object> NO_CONTEXT_MESSAGE =
//        Collections.unmodifiableMap(Collections.<String, Object>singletonMap("message", "No context to shutdown."));
//
//    private static final Map<String, Object> SHUTDOWN_MESSAGE =
//        Collections.unmodifiableMap(Collections.<String, Object>singletonMap("message", "Shutting down, bye..."));
//
//    @PostMapping(value = "shutdown")
//    public Map<String, Object> shutdown() {
//
//        if (this.context == null) {
//            return NO_CONTEXT_MESSAGE;
//        }
//        try {
//            return SHUTDOWN_MESSAGE;
//        } finally {
//            Thread thread = new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        Thread.sleep(500L);
//                    } catch (InterruptedException ex) {
//                        Thread.currentThread().interrupt();
//                    }
//                    context.close();
//                    // context.stop();
//                }
//            });
//            thread.setContextClassLoader(getClass().getClassLoader());
//            thread.start();
//        }
//    }
//
//    /**
//     * 
//     * stop:(这里用一句话描述这个方法的作用). <br/>
//     * TODO(这里描述这个方法适用条件 – 可选).<br/>
//     * TODO(这里描述这个方法的执行流程 – 可选).<br/>
//     * TODO(这里描述这个方法的使用方法 – 可选).<br/>
//     * TODO(这里描述这个方法的注意事项 – 可选).<br/>
//     *
//     * @author dengqian
//     * @return
//     * @since JDK 1.8
//     */
////    @PostMapping(value = "stop")
////    public Map<String, Object> stop() {
////
////        if (this.context == null) {
////            return NO_CONTEXT_MESSAGE;
////        }
////        try {
////            return SHUTDOWN_MESSAGE;
////        } finally {
////            Thread thread = new Thread(new Runnable() {
////                @Override
////                public void run() {
////                    try {
////                        Thread.sleep(500L);
////                    } catch (InterruptedException ex) {
////                        Thread.currentThread().interrupt();
////                    }
////                    
////                    if (registration == null) {
//////                         ResponseEntity.status(HttpStatus.NOT_FOUND).body("no registration found");
////                    }
////
////                    serviceRegistry.setStatus(registration, InstanceInfo.InstanceStatus.DOWN.name());
////                    context.stop();
////                }
////            });
////            thread.setContextClassLoader(getClass().getClassLoader());
////            thread.start();
////        }
////    }
//
//    @PostMapping(value = "start")
//    public Map<String, Object> start() {
//
//        if (this.context == null) {
//            return NO_CONTEXT_MESSAGE;
//        }
//        try {
//            return SHUTDOWN_MESSAGE;
//        } finally {
//            Thread thread = new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        Thread.sleep(500L);
//                    } catch (InterruptedException ex) {
//                        Thread.currentThread().interrupt();
//                    }
//                    // context.close();
//                    context.start();
////                    serviceRegistry.setStatus(registration, InstanceInfo.InstanceStatus.UP.name());
//
//                }
//            });
//            thread.setContextClassLoader(getClass().getClassLoader());
//            thread.start();
//        }
//    }
//
//    @PostMapping(value = "refresh")
//    public String[] refresh() {
//        Set<String> keys = contextRefresher.refresh();
//        return keys.toArray(new String[keys.size()]);
//    }
//
//    @RequestMapping(path = "instance-status", method = RequestMethod.POST)
//    @ResponseBody
//    @ManagedOperation
//    public ResponseEntity<?> setStatus(@RequestBody String status) {
//        Assert.notNull(status, "status may not by null");
//
//        if (this.registration == null) {
//            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("no registration found");
//        }
//
////        this.serviceRegistry.setStatus(this.registration, status);
//        return ResponseEntity.ok().build();
//    }
//    
//    @PostMapping(value ="restart")
//    public  Map<String, Object> restart() {
//        
//        if (this.context == null) {
//            return NO_CONTEXT_MESSAGE;
//        }
//        try {
//            return SHUTDOWN_MESSAGE;
//        }
//        finally {
//            Thread thread = new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        Thread.sleep(500L);
//                    }
//                    catch (InterruptedException ex) {
//                        Thread.currentThread().interrupt();
//                    }
//                    context.close();
////                    context.s
//                   // context.stop();
//                }
//            });
//            thread.setContextClassLoader(getClass().getClassLoader());
//            thread.start();
//        }
//    }
//
//    // @SuppressWarnings({ "unchecked", "rawtypes" })
//    // @RequestMapping(value = "/loggerInfo", method = RequestMethod.GET)
//    // public String loggerLevel(HttpServletRequest request) {
//    // String infos = "";
//    // Map<String, String> infomap = new HashMap<>();
//    // String url = "http://" + request.getServerName() + ":" + request.getServerPort() + "/loggers";
//    // try {
//    // String loginfo = restTemplate.getForObject(url, String.class);
//    // Map jsonStr = JSONObject.parseObject(loginfo);
//    // Map<String, Map<String, String>> jsonlog = (Map<String, Map<String, String>>) jsonStr.get("loggers");
//    // for (Map.Entry<String, Map<String, String>> entry : jsonlog.entrySet()) {
//    // infomap.put(entry.getKey(), entry.getValue().get("configuredLevel"));
//    // }
//    // }
//    // catch (RestClientException e) {
//    // logger.error(e.getMessage(), e);
//    // }
//    // infos = JSONObject.toJSONString(infomap);
//    // return infos;
//    // }
//    //
//    // /**
//    // * <b>方法描述：</b> 设置运行平台的日志级别 <br/>
//    // * <b>创建者：</b> 于建军 <br/>
//    // * <b>创建时间：</b> 2018年1月1日 下午10:25:44 <br/>
//    // *
//    // * @param request
//    // * @param logName 日志名称
//    // * @param logLevel 日志级别
//    // * @return true成功，false失败
//    // */
//    // @RequestMapping(value = "/setLogger/{logName}/{logLevel}", method = RequestMethod.POST)
//    // public String setLogger(HttpServletRequest request, @PathVariable String logName, @PathVariable String logLevel)
//    // {
//    // String re = "true";
//    // String url = "http://" + request.getServerName() + ":" + request.getServerPort() + "/loggers/" + logName;
//    //
//    // try {
//    // HttpHeaders headers = new HttpHeaders();
//    // MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
//    // headers.setContentType(type);
//    // Map<String, String> logmap = new HashMap<>();
//    // logmap.put("configuredLevel", logLevel);
//    // HttpEntity<String> entity = new HttpEntity<>(JSONObject.toJSONString(logmap), headers);
//    // restTemplate.postForObject(url, entity, String.class);
//    // }
//    // catch (RestClientException e) {
//    // logger.error(e.getMessage(), e);
//    // re = "false";
//    // }
//    // return re;
//    // }
//}
